package com.liqi.frame.comm.service;

import com.liqi.frame.comm.po.User;

import java.util.List;

/**
 * 用户服务接口
 * @author liqi on 2017-05-26.
 * liqiwork@qq.com
 */
public interface UserService {
    /**
     * 按用户名取得用户对象
     * @param username 用户名
     * @return 用户对象
     */
    User getByUsername(String username);

//    Set<String> getRoles(String username);
//
//    Set<String> getPermissions(String username);

    /**
     * 取用户数据(用于登录认证)
     * @param username 用户名
     * @param pswd 密码
     * @return 用户对象
     */
    User login(String username, String pswd);

    /**
     * 取得指定用户中文名的用户（模糊查询）
     * @param fullname 用户中文名
     * @param groupIds 组织id组织
     * @return 用户列表
     */
    List<User> selectList(String fullname, String[] groupIds);

    /**
     * 取得指定类型的用户
     * @param userType 用户类型
     * @return 用户列表
     */
    List<User> getListByUserType(String userType);

    /**
     * 取得指定手机号的用户列表
     * @param phone 手机号
     * @return 用户列表
     */
    List<User> getListByPhone(String phone);

    /**
     * 取得指定id的用户
     * @param id 用户id
     * @return 用户
     */
    User getUserById(String id);

    /**
     * 插入用户信息
     * @param userId 用户id
     * @param username 用户名
     * @param pswd 密码（加密后）
     * @param status 状态
     * @param fullname 用户中文名
     * @param phone 用户
     * @param email 邮箱
     * @param comment 说明
     * @param orderId 序号
     * @param groupId 组织id
     * @param groupName 组织名称
     * @param theme 主题
     * @param avatar 头像
     * @param userType 用户类型
     * @return 1：成功
     */
    int insertUser(String userId,
                   String username,
                   String pswd,
                   int status,
                   String fullname,
                   String phone,
                   String email,
                   String comment,
                   Float orderId,
                   String groupId,
                   String groupName,
                   String theme,
                   String avatar,
                   String userType);

    /**
     * 修改提定id的用户信息
     * @param userId 用户id
     * @param username 用户名
     * @param pswd 密码（加密后）
     * @param status 状态
     * @param fullname 用户中文名
     * @param phone 电话
     * @param email 邮箱
     * @param comment 说明
     * @param orderId 序号
     * @param groupId 组织id
     * @param groupName 组织名称
     * @param theme 主题
     * @param avatar 头像
     * @param userType 用户类型
     * @return 结果
     */
    int updateUser(String userId,
                   String username,
                   String pswd,
                   int status,
                   String fullname,
                   String phone,
                   String email,
                   String comment,
                   Float orderId,
                   String groupId,
                   String groupName,
                   String theme,
                   String avatar,
                   String userType
                   );

    /**
     * 修改指定用户的主题
     * @param userId 用户id
     * @param theme 主题
     * @return 结果
     */
    int updateUserTheme(String userId, String theme);

    /**
     * 删除指定用户<font color="red"><b>（此方法禁止直接公开给用户使用）</b></font>
     * @param id 用户id
     * @return 结果
     */
    int deleteUser(String id);

    /**
     * 添加或修改指定用户的角色
     * @param userId 用户id
     * @param roleIds 角色id数组
     * @return 结果
     */
    int saveUserAndRoles(String userId, String[] roleIds);

    /**
     * 验证用户名密码是否正确
     * @param username 用户名
     * @param password 密码
     * @return 是否正确
     */
    boolean verifyUsernamePassword(String username, String password);

    /**
     * 修改密码 <font color="red"><b>（此方法禁止直接公开给用户使用）</b></font>
     * @param username 用户名
     * @param password 密码（加密前）
     * @return 结果
     */
    int modifyPassword(String username, String password);

    /**
     * 修改密码
     * @param username 用户
     * @param oldPassword 旧密码（加密前）
     * @param newPassword 新密码（加密前）
     * @return 结果
     */
    int modifyPassword(String username, String oldPassword, String newPassword);

    /**
     * 取得指定组织的用户
     * @param groupId 组织id
     * @return 用户列表
     */
    List<User> getUserListByGroupId(String groupId);
}
